/**
 * 配置管理器
 * 负责加载和管理应用配置
 */
class ConfigManager {
  constructor() {
    this.config = null;
    this.loaded = false;
  }

  /**
   * 加载配置文件
   */
  async loadConfig() {
    if (this.loaded) {
      return this.config;
    }

    try {
      const response = await fetch('./config.json');
      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
      }
      
      this.config = await response.json();
      this.loaded = true;
      
      console.log('配置文件加载成功:', this.config);
      return this.config;
    } catch (error) {
      console.error('加载配置文件失败:', error);
      
      // 使用默认配置
      this.config = this.getDefaultConfig();
      this.loaded = true;
      
      return this.config;
    }
  }

  /**
   * 获取默认配置
   */
  getDefaultConfig() {
    return {
      ollama: {
        OLLAMA_BASE_URL: "http://localhost:11434",
        api: {
          generate: "/api/generate",
          tags: "/api/tags"
        },
        model: "qwen3:0.6b",
        parameters: {
          temperature: 0.7,
          top_k: 40,
          top_p: 0.9,
          repeat_penalty: 1.1
        }
      },      backend: {
        BASE_URL: "http://localhost:8080",
        islocal: false,
        api: {
          upload: "/api/minio/uploadFile",
          list: "/api/minio/listFile",
          delete: "/api/minio/deleteFileById"
        },
        timeout: 30000
      }
    };
  }

  /**
   * 获取后端配置
   */
  getBackendConfig() {
    return this.config?.backend || this.getDefaultConfig().backend;
  }

  /**
   * 获取Ollama配置
   */
  getOllamaConfig() {
    return this.config?.ollama || this.getDefaultConfig().ollama;
  }

  /**
   * 获取后端API基础URL
   */
  getBackendBaseURL() {
    const backendConfig = this.getBackendConfig();
    return backendConfig.BASE_URL;
  }

  /**
   * 获取Ollama基础URL
   */
  getOllamaBaseURL() {
    const ollamaConfig = this.getOllamaConfig();
    return ollamaConfig.OLLAMA_BASE_URL;
  }
  /**
   * 获取后端API超时时间
   */
  getBackendTimeout() {
    const backendConfig = this.getBackendConfig();
    return backendConfig.timeout || 30000;
  }

  /**
   * 获取是否使用本地模式
   */
  isLocalMode() {
    const backendConfig = this.getBackendConfig();
    return backendConfig.islocal || false;
  }

  /**
   * 设置本地模式
   */
  setLocalMode(isLocal) {
    const backendConfig = this.getBackendConfig();
    backendConfig.islocal = isLocal;
    this.updateConfig({ backend: backendConfig });
  }

  /**
   * 更新配置
   */
  updateConfig(newConfig) {
    if (this.config) {
      this.config = { ...this.config, ...newConfig };
    } else {
      this.config = newConfig;
    }
  }

  /**
   * 保存配置到本地存储
   */
  saveConfigToLocalStorage() {
    if (this.config) {
      try {
        localStorage.setItem('appConfig', JSON.stringify(this.config));
      } catch (error) {
        console.error('保存配置到本地存储失败:', error);
      }
    }
  }

  /**
   * 从本地存储加载配置
   */
  loadConfigFromLocalStorage() {
    try {
      const savedConfig = localStorage.getItem('appConfig');
      if (savedConfig) {
        this.config = JSON.parse(savedConfig);
        this.loaded = true;
        return this.config;
      }
    } catch (error) {
      console.error('从本地存储加载配置失败:', error);
    }
    return null;
  }

  /**
   * 重置配置为默认值
   */
  resetToDefault() {
    this.config = this.getDefaultConfig();
    this.loaded = true;
  }

  /**
   * 检查配置是否已加载
   */
  isLoaded() {
    return this.loaded;
  }

  /**
   * 获取完整配置
   */
  getConfig() {
    return this.config;
  }
}

// 创建全局配置管理器实例
window.configManager = new ConfigManager();

// 导出类
window.ConfigManager = ConfigManager;
